package com.itheima.vms.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.vms.domain.PageResult;
import com.itheima.vms.domain.dto.ItemDateDto;
import com.itheima.vms.domain.dto.ItemUpdateDto;
import com.itheima.vms.domain.dto.SkuDto;
import com.itheima.vms.domain.po.ItemSku;
import com.itheima.vms.domain.po.ItemSpu;
import com.itheima.vms.domain.vo.ItemEchoVo;
import com.itheima.vms.domain.vo.ItemListVo;
import com.itheima.vms.domain.vo.SkuVO;
import com.itheima.vms.mapper.CategoryMapper;
import com.itheima.vms.mapper.ItemMapper;
import com.itheima.vms.service.IItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@Service
public class ItemServiceImpl implements IItemService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private ItemMapper itemMapper;

    //分页
    @Override
    public PageResult<ItemListVo> page(Integer page, Integer pageSize, String code,String title, String itemCategory) {
        PageHelper.startPage(page,pageSize);
        List<ItemListVo> list= itemMapper.page(code,title,itemCategory);
        PageInfo<ItemListVo> pageInfo = new PageInfo<>(list);
        return new PageResult<>(pageInfo.getList(), pageInfo.getTotal());
    }

    //添加
    @Override
    @Transactional
    public Object addItem(ItemDateDto dto) {
        //创建SPU对象
        ItemSpu spu = new ItemSpu();
        spu.setTitle(dto.getTitle());
        spu.setDescription(dto.getDescription());
        spu.setSupplierId(dto.getSupplierId());
        //处理品牌
        try {
            if(dto.getBrand()!=null && ObjectUtil.isNotEmpty(dto.getBrand())){
                spu.setBrandId(Integer.valueOf(dto.getBrand()));
                spu.setBrandId(0);
            }
        } catch (NumberFormatException e) {
            throw new RuntimeException(e);
        }
        //处理分类
        if(dto.getCategoryId()!=null && ObjectUtil.isNotEmpty(dto.getCategoryId())){
            List<Integer> categoryIds = dto.getCategoryId();
            if(categoryIds.size()>=1){
                spu.setCategoryId1(categoryIds.get(0));
            }
            if(categoryIds.size()>=2){
                spu.setCategoryId2(categoryIds.get(1));
            }
            if(categoryIds.size()>=3){
                spu.setCategoryId3(categoryIds.get(2));
            }
        }
        spu.setIsDel(1);
        spu.setCreateTime(LocalDateTime.now());
        spu.setUpdateTime(LocalDateTime.now());
        //保存SPIU信息
        itemMapper.insertSpu(spu);
        //保存SKU信息
        if(ObjectUtil.isNotEmpty(dto.getSkuList())){
            for(SkuDto skuDto : dto.getSkuList()){
                ItemSku sku = new ItemSku();
                //设置SkU属性
                sku.setSpuId(spu.getId());
                sku.setTitle(skuDto.getSkutitle());
                sku.setCode(skuDto.getSkucode());
                sku.setUnit(skuDto.getUnit());

                //处理数值类型转换
                sku.setPrice(skuDto.getPrice()!=null ? BigDecimal.valueOf(skuDto.getPrice()):BigDecimal.ZERO);
                sku.setRealPrice(skuDto.getRealPrice()!=null?BigDecimal.valueOf(skuDto.getRealPrice()):BigDecimal.ZERO);
                sku.setProductWeight(skuDto.getProductWeight()!=null?skuDto.getProductWeight().intValue():0);
                sku.setProductLength(skuDto.getProductLength()!=null?skuDto.getProductLength().intValue():0);
                sku.setProductWidth(skuDto.getProductWidth()!=null?skuDto.getProductWidth().intValue():0);
                sku.setProductHeight(skuDto.getProductHeight()!=null?skuDto.getProductHeight().intValue():0);

                sku.setIsDel(1);
                sku.setCreateTime(LocalDateTime.now());
                sku.setUpdateTime(LocalDateTime.now());
                //保存SKU信息
                itemMapper.insertSku(sku);
            }
        }
        return "商品添加成功";
    }

    @Override
    public ItemEchoVo getItemDateById(Integer id) {
        //根据ID查询SPU信息
        ItemSpu spu= itemMapper.selectSpuById(Long.valueOf(id));
        if(spu==null){
            return null;
        }
        ItemEchoVo vo = new ItemEchoVo();
        vo.setId(Math.toIntExact(spu.getId()));
        vo.setTitle(spu.getTitle());
        vo.setDescription(spu.getDescription());
        vo.setSupplierId(spu.getSupplierId());
        vo.setBrand(String.valueOf(spu.getBrandId()));
        //设置分类Id
        if(spu.getCategoryId3()!=null && spu.getCategoryId3()!=0){
            vo.setCategoryId(spu.getCategoryId3());
        } else if (spu.getCategoryId2()!=null && spu.getCategoryId2()!=0) {
            vo.setCategoryId(spu.getCategoryId2());
        }else{
            vo.setCategoryId(spu.getCategoryId1());
        }
        //查询SKU列表
        List<ItemSku> skuList = itemMapper.selectSkuById(spu.getId());
        //转换SKU为Vo
        List<SkuVO> skuVOList =skuList.stream().map(sku->{
            SkuVO skuVO = new SkuVO();
            skuVO.setId(Math.toIntExact(sku.getId()));
            skuVO.setSkutitle(sku.getTitle());
            skuVO.setUnit(sku.getUnit());
            skuVO.setSkucode(sku.getCode());
            skuVO.setPrice(sku.getPrice()!=null?sku.getPrice().doubleValue():0.0);
            skuVO.setRealPrice(sku.getRealPrice()!=null?sku.getRealPrice().doubleValue():0.0);
            skuVO.setProductWeight(sku.getProductWeight() != null ? sku.getProductWeight().doubleValue() : 0.0);
            skuVO.setProductLength(sku.getProductLength() != null ? sku.getProductLength().doubleValue() : 0.0);
            skuVO.setProductWidth(sku.getProductWidth() != null ? sku.getProductWidth().doubleValue() : 0.0);
            skuVO.setProductHeight(sku.getProductHeight() != null ? sku.getProductHeight().doubleValue() : 0.0);
            skuVO.setProductVolume(sku.getProductVolume() != null ? sku.getProductVolume().doubleValue() : 0.0);
            return skuVO;
        }).collect(Collectors.toList());
        vo.setSkuList(skuVOList);
        return vo;
    }


    //修改
    @Override
    public Object updateItemDate(ItemUpdateDto dto) {
        return null;
    }

    @Override
    public List<Map<String, Object>> getItemList() {
        return List.of();
    }

}
